package inherit;

import java.util.Arrays;

/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2022/9/13 21:
 * final 终结器的使用
 *          1.
 *          final修饰的基础数据类型，值不能改，保存的数值不能改
 *          final修饰的引用数据类型，值不能改，保存的地址不能改，但是地址中的内容可以修改
 *          在类中定义常量时，一般搭配static一起使用(不强制，但是通常定义为静态常量，和类绑定，所有对象共享此属性)
 *
 * 常量命名规则：
 *      常量使用全大写命名，多个单词用下划线分割，常量必须在定义时 赋值！没有默认值。
 *
 *          2.被final修饰的方法 不可以被重写（不允许被子类覆盖）
 *
 *          3.被final修饰的类不能被继承，final修饰的类 没有子类
 *
 *          4.为什么String类要使用final修饰：为了保证JDK的使用者，大家用的String类完全一模一样，没有别的版本，特殊的引用类型，统一标准
 *
 *   关于组合和继承： 类和类的关系
 *      继承是 树状结构        is a 原则
 *      组合   水平方向        has a 原则
 */
public class FinalDemo {
    public static void main(String[] args) {
        // final修饰的基础数据类型，值不能改，保存的数值不能改
        final int a = 0b10;
        System.out.println(a);
        // final修饰的引用数据类型，值不能改，保存的地址不能改,但是地址中的内容可以修改
        final int[] arr = {0,0};
        arr[0] = 1;
        System.out.println(Arrays.toString(arr));
        int[] arr1 = new int[]{};

        // java: 无法为最终变量arr分配值
//        arr=arr1;
    }
}
